package com.dib.neo.bkfs.net;

import io.netty.channel.epoll.Epoll;

import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.UnknownHostException;

/**
 * Network utility
 */
public class NetworkUtils {

  private static final boolean ENABLE_EPOOL_NATIVE =
      System.getProperty("os.name").equalsIgnoreCase("linux")
          && !Boolean.getBoolean("bkfs.network.disablenativeepoll")
          && Epoll.isAvailable();

  public static boolean isEnableEpoolNative() {
    return ENABLE_EPOOL_NATIVE;
  }

  public static String getAddress(InetSocketAddress address) {
    if (address.getAddress() != null) {
      return address.getAddress().getHostAddress();
    } else {
      return address.getHostName();
    }
  }

  public static int assignFirstFreePort() throws IOException {
    try (
        ServerSocket socket = new ServerSocket(0);) {
      return socket.getLocalPort();

    }
  }

  public static String getLocalNetworkAddress() throws UnknownHostException {
    return InetAddress.getLocalHost().getHostName();
  }
}
